home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac: Not for Sale / Another.not.for.sale (Australia).iso / hold me in your arms / Virtual-Worlds / commercial / CDK_vs_WTK < prev    next >
Internet Message Format  |  1993-05-02  |  25KB

  1. Date: Sun, 2 May 1993 21:36:13 -0700
  2. From: Kenneth Pimentel <kp@well.sf.ca.us>
  3. Subject: SOFTWARE: Cyberspace Developer Kit (Autodesk) vs. WorldToolKit (Sense8)
  4.  
  5.  
  6. I found this on the Amulet BBS and thought scivw readers might be
  7. interested in it:
  8. -------------------------------------------------------------------------
  9.  
  10. Originally written 4-23-93, last draft on 4-28-93
  11.  
  12. Ok, I know several people have been waiting for my comparison of
  13. WTK(WorldToolKit) from Sense8 Corp. and CDK(Cyberspace Developer Kit)
  14. from AutoDesk Inc. Since I first dropped a note on my favorite BBS
  15. about having both products many people have expressed an interest in
  16. hearing about my findings. Because of this enormous interest, I have
  17. tried to write a very responsible report, sticking to simply the
  18. facts. Although I do share some of my opinions, please keep in mind
  19. that's what they are, opinions.
  20.  
  21. Who am I? My name is Jeffrey Donovan. l am forming a new startup
  22. company in Sausalito and we are developing standalone VR applications
  23. and 3rd party VR software libraries. I have been working with
  24. WorldToolKit from Sense8 corp.  for awhile now, and prior to that was
  25. writing my own pseudo-VR systems using wire-frame rendering only. I
  26. have been programming in C for 8 years (my latest book "Building A
  27. Better Mouse Trap, A Programmer's Guide To The Mouse", was released
  28. this March from Osborne McGraw-Hill) and have been programming in C++
  29. since Borland released C++ V1.0.
  30.  
  31. Because I have very limited time (I really need to get back to work),
  32. and because I will try to cover as many issues as possible, there may
  33. be some areas I do not cover in enough detail. Please leave me mail
  34. about any item you would like a bit more info on.
  35.  
  36. Machine Used :
  37. --------------
  38.    I am currently using the products on a 486 66-mhz Compaq with 8 megs
  39.    memory, 240 meg hd, NEC MultiSynch 5FG, SPEA fire board, PharLap 386
  40.    DOS extender and compiling with the MetaWare 32-bit C/C++ compiler (a
  41.    great compiler!). The only input devices I have used or tested to date
  42.    are the keyboard and a standard 2-d mouse. The worlds I tested with both
  43.    CDK and WTK ranged from 500 to over 10,000 polygons.
  44.  
  45. Style Of The Libraries:
  46. -----------------------
  47.    WTK is designed with C and a good OOP design in mind. With
  48.    WorldToolKit from Sense8, a novice C programmer could probably start
  49.    building their own exciting worlds in about 2-3 hours and pros will
  50.    be flying the minute it's installed.
  51.  
  52.    CDK embraces C++ to the fullest extent. Fluency in C++ and all it's
  53.    abstractions is required and it is not a product for inexperienced
  54.    C++ programmers. If you are fluent in C++ you'll be up and flying
  55.    quickly.
  56.  
  57. Functionality:
  58. ---------------
  59.    WTK and CDK provide much of the same functionality you would expect
  60.    in virtual libraries. So, instead of concentrating on every individual
  61.    issue, I will do a comparison of the most obvious components I have
  62.    found(or not found) so far.
  63.  
  64.    Portals:
  65.    --------
  66.    CDK has no portals. Although it's entirely possible to handle portalling
  67.    yourself(a portal is a window to a different world), WTK provides a rich
  68.    set of functions to handle this for you. You also have tremendous
  69.    flexibility in WTK when moving thru different worlds by way of programmer
  70.    defined entry and exit functions.
  71.  
  72.    Terrain:
  73.    --------
  74.    CDK offers no built in terrain functions. Terrain mapping and following
  75.    can be extremely important depending on the virtual application, and
  76.    again, while the programmer can handle this manually, I am disappointed
  77.    that there are no built in terrain functions in CDK. With WTK it's one
  78.    line of code and you can make either flat gridded terrain or FANTASTIC
  79.    random terrain. I mean really great terrain! Then you can apply textures
  80.    to that terrain and build some wild landscapes in just two function
  81. calls.
  82.    You can also read in your own terrain from an ASCII file and terrain
  83.    following functions are built in as well.
  84.  
  85.    Backface Rejection:
  86.    -------------------
  87.    I have not yet discovered ANY method with CDK to allow flying into an
  88.    object(individual objects) and viewing the interior. This may be due to
  89.    the fact that the function to set backface rejection is not working
  90.    properly, or that I am doing something wrong in CDK.
  91.  
  92.    Update
  93.    4/27/93: The SPEA calls to set BackFace rejection were not implemented
  94.             in this version of CDK and I was referred to the SPEA manual
  95.             to look for their backface functions.
  96.  
  97.    Dynamic Objects and Properties:
  98.    -------------------------------
  99.    CDK provides more functions for dynamically creating geometric objects
  100.    and handling physical properties. For instance, morphing objects with
  101.    boolean functions, spring damping and friction functions, etc. WTK has
  102.    several pre-defined geometric objects that are programmer definable, and
  103.    I have found it very easy to build more complex objects as well. Physical
  104.    properties are something missing from WorldToolKit and left up to the
  105.    programmer, although if you know a bit of math implementing physical
  106.    properties on a WTK object is extremely easy.
  107.  
  108.    Lighting:
  109.    ---------
  110.    CDK has better lighting qualities. Shininess can be applied to objects
  111.    very easily, and this makes the worlds seem less cartoonish. I must say
  112.    that the surface tables and lighting properties allow you to create some
  113.    very "spooky" effects and some very real looking worlds. Lighting is also
  114.    more controllable and you can set the color of light as well.
  115.  
  116.    VESA:
  117.    -----
  118.    CDK has the ability to run on VESA systems. Look for WTK to be supporting
  119.    VESA by the next SIGGRAPH conf.
  120.  
  121.    Textures:
  122.    ---------
  123.    WorldToolKit offers a wealth of functions for textures. The textures are
  124.    imported from TARGA files, and many commercially available paint
  125.    programs (I use CorelDraw) have the capability to generate TARGA(*.TGA)
  126.    files. This makes it EXTREMELY easy to create and use textures. Textures
  127.    in WTK can also be solid or transparent, and the capability to add
  128.    textures is something I consider essential for realistic applications,
  129.    even more important than lighting. With textures, an object that is
  130.    supposed to be made of wood can have a wood texture applied to it, and it
  131.    becomes wood! With carefully applied textures, certain applications can
  132.    also reduce the number of polygons needed for a specific object, because
  133. a
  134.    simpler object can be made and a texture applied instead of using many
  135.    complex objects(more polygons) for full details. Rendering speed can
  136.    increase dramatically with this trick. With WTK and the SPEA card texture
  137.    application and manipulation speed is  nothing less than phenomenal.
  138.  
  139.    NOTE: The upcoming VESA version of WorldToolKit will be supporting
  140.          textures as well.
  141.  
  142.    CDK has a class for textures(CyTexture), but it is a place-holder for
  143.    future expansion on CDK. Currently CDK does not support textures on
  144.    any platform.
  145.  
  146.    Attachments:
  147.    ------------
  148.    Both WTK and CDK offer functions to build complex models by attaching
  149.    one object to another and defining how the objects interact with one
  150.    another. Separate pivot points, rotational qualities, etc. can all be
  151.    had thru attachments. WTK provides more functionality than CDK in
  152.    regards to attachments(or assemblies).
  153.  
  154.    Opinion: Sense8 has thought out attachments more thoroughly than
  155.             Autodesk, making it very, very intuitive, almost second
  156.             nature.
  157.  
  158.    Animation:
  159.    ----------
  160.    Both WTK and CDK both provide animation sequences but I haven't used
  161.    the auto-animate features of either yet.
  162.  
  163.    Paths:
  164.    ------
  165.    WorldToolkit offers you many functions for recording, saving, loading,
  166.    interpolating, defining, rewinding, and managing paths.(A preset flight
  167.    path through the world or by an object). I haven't gotten as deep as you
  168.    can go with the paths but so far it's been easy. These features allows
  169.    you or and end-user (if set up properly) to fly a preset course in the
  170.    world for presentation  or special sequences. The paths can also be for
  171.    individual objects and you can have multiple active paths. I haven't
  172.    found any path functions in CDK.
  173.  
  174.    Distance Representation:
  175.    ------------------------
  176.    Both WTK and CDK provide functions for distant objects. What this
  177.    means is that you can have a less detailed copy of an object and
  178.    swap it for the detailed object when viewed at a specified distance.
  179.    The big difference is that WTK gives you a function to create a less
  180.    detailed object automatically and it will be indistinguishable from the
  181.    original object when viewed from the specified distance. With CDK you
  182.    must create the lesser detailed object. CDK provides a distance policy
  183.    for automatic swapping, while it's up to the programmer to poll the
  184.    distance and swap the objects in WTK.
  185.  
  186.    Supported File Types:
  187.    ---------------------
  188.    Both WTK and CDK can read a 3d DXF files with a single function call.
  189.    CDK can also read 3d Studio files, but not the animation sequences.
  190.    WorltToolKit also has it's own Neutral File Format. Basically this is
  191.    an ASCII file that contains the objects' name, vertex list, polygon list,
  192.    colors and optional polygon id #'s, shading properties, textures file
  193.    names for individual polygons, portals, etc. Sense8 gives you detailed
  194.    instructions for setting up the file and it's a snap. As I stated in the
  195.    opening, I originally started writing my own pseudo-VR systems using wire
  196.    frame modelling.  It took me 1 hour to figure out the WTK NFF format and
  197.    spew my wire frame world(2400+ polygons) into a file WTK could read. To
  198.    me, this is a very impressive feature, because your not limited to DXF
  199.    or 3DS files. Any file type you can read can be converted into a file
  200.    WTK can read. WorldToolKit also has functions to automatically convert
  201.    NFF files to DXF files and vice-versa.
  202.  
  203.    As previously stated WTK also reads TARGA(.TGA) files for textures.
  204.  
  205.    AutoCAD:
  206.    --------
  207.    CDK has the ability to run concurrent with AutoCAD, but I have not
  208.    tested any of these capabilities.
  209.  
  210.    Attached Data:
  211.    --------------
  212.    Both WTK and CDK allow programmer defined data to be attached to
  213.    objects easily.
  214.  
  215.    Networking:
  216.    -----------
  217.    I have not yet written any multi-user virtual environments so I am
  218.    not qualified to make any type of comparison here.
  219.  
  220. Speed:
  221. ------
  222.    I have written several identical applications using WTK and CDK. WTK
  223.    renders faster. With WorldToolkit, you can also improve speed in a
  224.    multitude of ways including importing stationary geometry at startup
  225.    and critical shading property functions. For instance, By loading a
  226.    polygon file as stationary geometry instead of a dynamic object FPS
  227.    speed increases about 4-5 fold. Additionally, you have a variety of
  228.    options for enhancing speed of dynamic objects by setting shading,
  229.    fastmerge and principal axis calculation flags. Speed enhancement can be
  230.    as much as 3 fold depending on the method. I haven't found any functions
  231.    of this type with CDK.
  232.  
  233.    I will not give any FPS quotes because they are always a bit subjective
  234.    and besides, there's no way to retrieve the frame rate in CDK (that I
  235.    have). WTK has a function to retrieve current FPS.
  236.  
  237.    CDK objects generate a bad flicker when viewed extremely close up and
  238.    moving. WTK objects are smooth throughout and you will only experience
  239.    flicker if you use the 800x600 mode due to the 2MB image copy from DRAM
  240.    to VRAM(the SPEA board is not fast enough to do it in less than 1/30th of
  241.    a second, so you end up with a potential flicker mid-screen when moving).
  242.    In all other modes there is no flicker whatsoever, no matter how close
  243.    you get to an object.
  244.  
  245. Documentation:
  246. --------------
  247.    Sense8: The documentation supplied with WTK from Sense8 is organized
  248.    in a clear, concise manner. When you need to find an object function,
  249.    look in the objects sections. When you need to find a light function,
  250.    look in the light section, etc. Every issue is covered and easily
  251.    retrievable.
  252.  
  253.    AutoDsk: The Autodesk manual follows no real format in regards to
  254.    individual issues. The classes and functions are organized
  255.    alphabetically only, so plan on jumping back and forth from section
  256.    to section to find details on classes and associated functions. The
  257.    index could also be improved dramatically.
  258.  
  259. Technical Support:
  260. ------------------
  261.    Sense8 : Technical support is nothing less than superb. Fear of
  262.    embarrassment has never stopped me from asking their staff any
  263.    question no matter how obvious the answer may seem, and they
  264.    have had an answer for every question without delay. They know
  265.    their code!
  266.  
  267.    AutoDsk: Autodesk's policy remains that it is the resellers
  268.    responsibility to provide technical support. While this may
  269.    work sufficiently for commercial standalone applications, I don't
  270.    think programmers will be satisfied. Not to degrade my reseller(he's
  271.    a nice guy) but he couldn't write a line of code to save his life.
  272.    When I want tech support I want to talk to programmers familiar with
  273.    the product, not my nearest Computerland dealer who thinks BASIC is
  274.    the language of choice. Autodesk needs to realize they are dealing
  275.    with programmers now and act accordingly.
  276.  
  277.    Update
  278.    4/27/93 - I originally wrote the last paragraph on 4/23/93. Well,
  279.              after a bit of complaining to AutoDesk, somebody did give
  280.              me a call and cleared up some confusion. I left this
  281.              original document fairly unchanged, and have made date
  282.              stamps of 4/27/93 by paragraphs of information where tech
  283.              support helped. This does not in any way change my thinking
  284.              in regards to AutoDesk's tech support. I shouldn't have had
  285.              to get heated up(after waiting three days for an answer) and
  286.              make those phone calls to get the help. It should be there
  287.              ready and waiting.
  288.  
  289. Errors:
  290. -------
  291.    Sense8: I have been working with WTK Version 2.0(available commercially
  292.    by the end of May). I started with the alpha version and am now working
  293.    with beta. I have yet to find a function that doesn't work as documented
  294.    with 2.0 beta and have used about 90 percent of the functions available
  295.    on my platform.
  296.  
  297.    AutoDsk : 2 of the 3 CDK Display functions I have used so far do not work
  298.    and if you use the SPEA card, your going to have to write some other mode
  299.    -reset code, because the AutoDesk function to get out of graphics mode
  300.    does not work. Wire-framing doesn't seem to work either. These problems
  301.    exist not only in the code I have written, but in every example AutoDesk
  302.    included as well. Additionally, some of the supplied examples included
  303.    with CDK generate up to 50+ warnings. While some are of no consequence,
  304.    I frown at code(especially commercial) that generates this many warnings.
  305.  
  306.    Update
  307.    4/27/93 - Wire framing is not supported with CDK on the SPEA card,
  308.              only VESA systems. Wire framing IS supported with WTK on
  309.              the SPEA card. The graphics mode problem is also a known
  310.              bug with CDK.
  311.  
  312. Code Example:
  313. -------------
  314. I thought I'd give you a small code example to sample the flavor of WTK
  315. and CDK. This code will do the barest of tasks. It simply makes a universe
  316. (or deck and space), sets up a mouse sensor, makes a single blue box of 100
  317. units, makes a single light, sets up the viewport and moves it back so the
  318. entire box is visible, and then goes into automatic simulation. Both
  319. programs
  320. respond to the mouse and both will quit when the letter 'q' is pressed.
  321.  
  322. This represents the simplest possible program to create and walkaround a
  323. single dynamic object with a dynamic light source. This sample is NOT
  324. intended in any way to demonstrate the capacities of either library, it
  325. simply demonstrates the "flavor" of each. Assume all headers are in place
  326. as well.
  327.  
  328. WorldToolKit Example:
  329. ---------------------
  330. static void actions(void);
  331.  
  332. main(void)
  333.    {
  334.    WTviewpoint *worldview;            /* Universe viewpoint
  335. */
  336.    WTsensor *mousesensor;             /* Mouse sensor
  337. */
  338.    WTobject *box;                     /* Box object
  339. */
  340.    WTlight  *light;                   /* Light object
  341. */
  342.    WTp3 dir,midpt,pos;                /* Position direction mid
  343. */
  344.  
  345.    WTuniverse_new(0,0);               /* Create new universe
  346. */
  347.    WTlight_setambient(0.15);
  348.    WTuniverse_setbgcolor(0x000);
  349.    WTuniverse_setrendering(WTRENDER_TEXTURED);
  350.  
  351.                                       /* Add a box to universe and set
  352. colr*/
  353.    box=WTobject_newblock(100.0,100.0,100.0,TRUE,FALSE);
  354.    WTobject_setcolor(box,0x00a);
  355.                                       /* Make a light, set it away from
  356. box*/
  357.    pos[X]=-50.0;pos[Y]=-50.0;pos[Z]=-200.0;
  358.    dir[X]=0.0;dir[Y]=0.0;dir[Z]=1.0;
  359.    light=WTlight_new(pos,dir,0.75);
  360.                                       /* Get the universe viewpoint, move
  361. */
  362.                                       /* move back out and then set view
  363. */
  364.    worldview=WTviewpoint_copy(WTuniverse_getviewpoint());
  365.    WTviewpoint_getdirection(worldview,dir);
  366.    WTs_multp3(WTuniverse_getradius()*2.0,dir);
  367.    WTuniverse_getmidpoint(midpt);
  368.    WTp3_subtract(midpt,dir,pos);
  369.    WTviewpoint_setposition(worldview,pos);
  370.    WTuniverse_setviewpoint(worldview);
  371.  
  372.                                       /* Get mouse sensor, attach it to
  373. */
  374.                                       /* universe view and set rates
  375. */
  376.    mousesensor=WTsensor_new(WTmouse_open,WTmouse_close,WTmouse_moveview2,
  377.                             NULL,1,WTSENSOR_DEFAULT);
  378.    WTviewpoint_addsensor(worldview,mousesensor);
  379.    WTsensor_setsensitivity(mousesensor,0.04*WTuniverse_getradius());
  380.    WTsensor_setangularrate(mousesensor,PI/8.0);
  381.  
  382.    WTuniverse_setactions(actions);    /* Set action function event-hndler
  383. */
  384.  
  385.    WTuniverse_ready();                /* Prep universe and run simulation
  386. */
  387.    WTuniverse_go();
  388.  
  389.    WTuniverse_delete();               /* Delete it all and exit
  390. */
  391.    return(0);
  392.    }
  393.  
  394. static void actions(void)
  395.    {
  396.    int ch;                            /* Scan for 'q' char and stop if so
  397. */
  398.    if (kbhit()){ch=getch();if (ch=='q') WTuniverse_stop();}
  399.    }
  400.  
  401. Cyberspace Developer Kit Example:
  402. ---------------------------------
  403.  
  404. CySensor6d *choose_sensor(const char *);
  405. CyDisplay3d *choose_display(const char *disp, Real range);
  406.  
  407. main(void)
  408.    {
  409.    CyDisplay3d *display;              // Display object
  410.    CyDeck *deck;                      // Deck    object
  411.    CySpace *space;                    // Space   object
  412.    CySurface *surface;                // Surface description
  413.    CySurfaceTable *stable;            // Surface table
  414.    CyColor specular,diffuse,ambient;  // Surface color tables
  415.    CyComponent *boxobj;               // Box component
  416.    CyCompInst *boxci;                 // Box component instance
  417.    CySimObj *box;                     // Box simulation oject
  418.    CyLight *light;                    // Single light
  419.    CyBbox *boundbox;                  // Component bounding box
  420.    CyVertex3 boxcenter;               // Center for bounding box
  421.    Real maxd;                         // Max diminsion
  422.  
  423.    CySensor6d *mousesensor;           // Mouse sensor
  424.    CyMouseView *mouseview;            // Mouse viewpoint
  425.    CyPlatformView *platform;          // Viewer platform
  426.  
  427.    deck = new CyDeck();               // Make deck and space and get
  428.    space= new CySpace();              // the mouse sensor.
  429.    deck->SetSpace( space );
  430.    mousesensor=choose_sensor("SENSOR1");
  431.    deck->AddSensor(mousesensor);
  432.  
  433.    light= new CyLight();             // Make a light, set it away from box
  434.    light->SetLightType(CY_SPOT);     // that is built later
  435.    light->SetPosition(CyVertex3(50.0,50.0,-200.0));
  436.    light->SetAim(CyVector3(0.0,0.0,1.0));
  437.    light->SetColorRGB(1.0,1.0,1.0);
  438.    light->SetMag(1.0);
  439.                                      // Set up a surface table so we
  440.                                      // can use our own colors.
  441.    specular.r=0.0;specular.b=1.0;specular.g=0.0;
  442.    diffuse.r=0.0;diffuse.b=1.0;diffuse.g=0.0;
  443.    ambient.r=0.0;ambient.b=1.0;ambient.g=0.0;
  444.    surface=new CySurface(0.5,0.5,1.0,0.1,1.0,&ambient,&diffuse,&specular);
  445.    stable =new CySurfaceTable(2);
  446.    stable ->SetSurface(1,surface);
  447.                                     // Build the box and add to
  448.                                     // simulation.
  449.    boxobj=new CySolBox(100.0,100.0,100.0,1);
  450.    boxci =new CyCompInst(boxobj);
  451.    box   =new CySimObj(boxci);
  452.    space->AddSimBase(box,SP_PHYSOBJ);
  453.  
  454.    boundbox = boxobj->GetBbox();      // Get bounding box
  455.    boxcenter= boundbox->Centroid();   // and properties.
  456.    maxd     = boundbox->MaxDim();
  457.                                       // Auto set display and set
  458.                                       // limits, perspective, surface
  459.                                       // table and light
  460.    display =choose_display("DISPLAY", 10 * maxd);
  461.    display->SetPersp(40.0, 1.333, 0.01, 9 * maxd);
  462.    display->SetSurfaceTable(stable);
  463.    display->AddLight(light);
  464.    deck->AddDisplay(display);
  465.                                       // Now make a platform for viewer
  466.                                       // and set it away from box, then
  467.                                       // set platform/sensor speed
  468.    platform = new CyPlatformView(boxcenter - (maxd * 4) * CyVector3(0,0,1),
  469.                                  boxcenter, CyVector3(0, 1, 0), display,
  470.                                  mousesensor);
  471.    platform->SetSpeed(maxd * 0.04);
  472.    space->AddSimBase(platform, SP_VIEWERS);
  473.  
  474.    mouseview= new CyMouseView();     // Attach mouse to platform view
  475.  
  476.    deck->Run();                      // Run the simulation, exit on 'q' char
  477.  
  478.    delete light;                     // Delete it all and exit
  479.    delete mouseview;
  480.    delete platform;
  481.    delete box;
  482.    delete boxci;
  483.    delete boxobj;
  484.    delete surface;
  485.    delete stable;
  486.    delete display;
  487.    delete mousesensor;
  488.    delete space;
  489.    delete deck;
  490.  
  491.    return EXIT_SUCCESS;
  492.    }
  493.  
  494. Code Notes:
  495. -----------
  496.  
  497. In the above WorldToolKit code listing, the lines -
  498.  
  499.    worldview=WTviewpoint_copy(WTuniverse_getviewpoint());
  500.    WTviewpoint_getdirection(worldview,dir);
  501.    WTs_multp3(WTuniverse_getradius()*2.0,dir);
  502.    WTuniverse_getmidpoint(midpt);
  503.    WTp3_subtract(midpt,dir,pos);
  504.    WTviewpoint_setposition(worldview,pos);
  505.    WTuniverse_setviewpoint(worldview);
  506.  
  507. could have been changed to one line that read-
  508.  
  509.    WTviewpoint_zoomall(worldview);
  510.  
  511. I left it the long version so you could better compare the WTK viewpoint
  512. method and the CDK platform view method. Although the methods are
  513. different, they are also still quite similar, and with WTK the bounding
  514. box method could have been used as well. Both have a variety of other
  515. methods to accomplish the task.
  516.  
  517. *** A 3d DXF file walkaround program can be done with the same amount of
  518. code in WTK and CDK.
  519.  
  520. Overall Opinion:
  521. ---------------
  522.    WorldToolKit lets you program more intuitively to the task, and I
  523.    find CDK's virtual abstractions somewhat confusing. However, both
  524.    WTK and CDK do allow a good programmer to get deep enough to do
  525.    anything. If development time is a big concern, you'll be flying
  526.    faster with WTK.
  527.  
  528.    WorltToolKit from Sense8 leaves me with the impression of being written
  529.    by people who have a wealth of experience with programming virtual
  530.    worlds and thinking about virtual implementation(both programmer and
  531.    end user). Sense8 has incorporated more thought into ease of programmer
  532.    implementation, and WorldToolKit is VERY coherent. Sense8 has also had
  533.    more time to listen to programmer feedback and react accordingly. Their
  534.    libraries are error free and work as specified.
  535.  
  536.    CDK from AutoDesk leaves me with the impression of being rushed to
  537.    market too fast just to be the only VESA version for the time
  538.    being(although we've all heard about it for quite some time,
  539.    it doesn't seem to have been tested thouroughly enough, especially
  540.    on the SPEA card). Autodesk also seems to have devoted more time to
  541.    designing features for tight integration with AutoCAD than developing
  542.    standalone virtual worlds. The product has several errors I have found so
  543.    far, most having to do with the SPEA card. I still have yet to receive a
  544.    VESA driver that CDK supports(my last one is the V7VESA.COM and it's
  545.    about a year old), but I should have a new one soon and will leave an
  546.    update regarding that.
  547.  
  548.    Please, if you disagree with any of my statements or have some
  549.    questions about either product, don't hesitate to leave me mail. I
  550.    can be reached at The Amulet BBS (310) 453-7705 in The Virtual
  551.    Forum(forum #1).
  552.  
  553.    Jeffrey S. Donovan
  554.  
  555.